Tipos de Log topic

Tipos de Log

Este módulo define os tipos concretos de log disponíveis na biblioteca. Todos estendem LoggerObjectBase e fazem parte da hierarquia selada LoggerObject.

LoggerObject (sealed)
    └── LoggerObjectBase (abstract)
            ├── DebugLog    (amarelo)
            ├── InfoLog     (branco)
            ├── WarningLog  (verde)
            └── ErrorLog    (vermelho + stack trace)

Cada tipo define sua própria cor via getColor(), suporta serialização JSON via @JsonSerializable() e pode ser criado diretamente ou via LoggerClassMixin.


DebugLog

Log de depuração, exibido em amarelo.

Indicado para mensagens de desenvolvimento: valores de variáveis, fluxo de execução, diagnósticos que não devem aparecer em produção.

@JsonSerializable()
class DebugLog extends LoggerObjectBase {
  DebugLog(super.message, {super.typeClass});

  factory DebugLog.fromJson(Map<String, dynamic> json);

  @override
  LoggerAnsiColor getColor(); // EnumAnsiColors.yellow

  @override
  Map<String, dynamic> toJson();
}

Exemplo de uso direto:

DebugLog('Valor de retorno: $resultado', typeClass: runtimeType).sendLog();

Via mixin:

class MinhaClasse with LoggerClassMixin {
  void processar() {
    logDebug('Iniciando processamento');
  }
}

InfoLog

Log informativo, exibido em branco.

Indicado para registrar eventos relevantes do fluxo normal da aplicação: operações concluídas, marcos de execução, mudanças de estado.

@JsonSerializable()
class InfoLog extends LoggerObjectBase {
  InfoLog(super.message, {super.typeClass});

  factory InfoLog.fromJson(Map<String, dynamic> json);

  @override
  LoggerAnsiColor getColor(); // EnumAnsiColors.white

  @override
  Map<String, dynamic> toJson();
}

Exemplo de uso direto:

InfoLog('Usuário autenticado com sucesso', typeClass: runtimeType).sendLog();

Via mixin:

class AuthService with LoggerClassMixin {
  void login() {
    logInfo('Login realizado');
  }
}

WarningLog

Log de aviso, exibido em verde.

Indicado para situações que merecem atenção mas não impedem o funcionamento da aplicação: uso elevado de recursos, comportamento inesperado não crítico, deprecações.

@JsonSerializable()
class WarningLog extends LoggerObjectBase {
  WarningLog(super.message, {super.typeClass});

  factory WarningLog.fromJson(Map<String, dynamic> json);

  @override
  LoggerAnsiColor getColor(); // EnumAnsiColors.green

  @override
  Map<String, dynamic> toJson();
}

Exemplo de uso direto:

WarningLog('Cache próximo do limite: ${usado}/${limite}', typeClass: runtimeType).sendLog();

Via mixin:

class CacheService with LoggerClassMixin {
  void verificar(int usado, int limite) {
    if (usado > limite * 0.8) {
      logWarning('Cache acima de 80% da capacidade');
    }
  }
}

ErrorLog

Log de erro, exibido em vermelho. Inclui o stackTrace associado ao erro.

Este é o único tipo com alwaysPrint = true, o que significa que ele sempre é processado independentemente de ConfigLog.enableLog ou ConfigLog.onlyClasses. Isso garante que erros críticos sejam sempre registrados em produção.

@JsonSerializable()
class ErrorLog extends LoggerObjectBase {
  @StackTraceConverter()
  final StackTrace stackTrace;

  ErrorLog(super.message, this.stackTrace, {super.typeClass});

  @override
  bool get alwaysPrint => true; // Sempre processado

  factory ErrorLog.fromJson(Map<String, dynamic> json);

  @override
  LoggerAnsiColor getColor(); // EnumAnsiColors.red

  @override
  String getMessage([bool withColor]);

  @override
  Map<String, dynamic> toJson();
}

O método getMessage do ErrorLog também inclui as linhas do stack trace na saída, formatadas e coloridas, facilitando a depuração diretamente no console.

Exemplo de uso direto:

try {
  await processarDados();
} catch (e, st) {
  ErrorLog('Falha ao processar dados: $e', st, typeClass: runtimeType).sendLog();
}

Via mixin:

class DataService with LoggerClassMixin {
  Future<void> carregar() async {
    try {
      // operação arriscada
    } catch (e, st) {
      logError('Erro ao carregar: $e', st);
    }
  }
}

Serialização JSON

Todos os tipos de log suportam serialização e desserialização JSON:

// Serializar
final log = DebugLog('Mensagem de teste');
final json = log.toJson();

// Desserializar
final logRecuperado = DebugLog.fromJson(json);

StackTrace em ErrorLog é serializado como String via StackTraceConverter.

Classes

DebugLog Tipos de Log
Log de depuração (debug) com formatação amarela.
ErrorLog Tipos de Log
Log de erro com formatação vermelha e stack trace.
InfoLog Tipos de Log
Log de informação geral com formatação branca.
WarningLog Tipos de Log
Log de aviso (warning) com formatação verde.